package API;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Bigdecimal {
    //用于小数的精确运算
    public static void main(String[] args) {
        /*
        构造方法获取BigDecimal对象
        public BigDecimal(double val)
        public BigDecimal(String val)

        静态方法获取bigDecimal对象
        ppublic static bigDecimal valueof(double val)

         */
        //1.通过传递double类型的小数来创建对象
        //  这种方式有可能是不精确的，不建议使用
          BigDecimal bd1=new BigDecimal(0.01);
          BigDecimal bd2=new BigDecimal(0.9);
        //System.out.println(bd1);
        //System.out.println(bd2);

        //2.通过传递字符串来表示小数的对象
        BigDecimal bd3=new BigDecimal("0.09");
        BigDecimal bd4=new BigDecimal("0.01");
        BigDecimal bd5 = bd3.add(bd4);
        //通过静态方法获取对象
        //获取源码：ctrl+b；
        //1.如果表示的数字不大，没有超过double的范围建议使用静态方法
        //2.如果表示的数字较大，超过double的范围建议使用构造方法
        //3.如果传递的是0~10之间的整数[0~10]，那么方法会返回已经创建好的对象
        //  和BigInteger类似
        BigDecimal bd6=BigDecimal.valueOf(10);
        BigDecimal bd7=BigDecimal.valueOf(10);
        //System.out.println(bd6==bd7);
        BigDecimal bd8=BigDecimal.valueOf(10.0);
        BigDecimal bd9=BigDecimal.valueOf(10.0);
        //System.out.println(bd8==bd9);

        //System.out.println(Double.MAX_VALUE);//1.79769313...*10的308次方
        /*
            public BigDecimal add(BigDecimal val)         加法
            public BigDecimal subtract(BigDecimal val)    减法
            public BigDecimal multiply(BigDecimal val)    乘法
            public BigDecimal divide(BigDecimal val)      除法
            public BigDecimal divide(BigDecimal val,精确几位，舍入模式) 除法
         */
        //加法
        BigDecimal bd10=BigDecimal.valueOf(10.0);
        BigDecimal bd11=BigDecimal.valueOf(2.0);
        BigDecimal bd12=bd10.add(bd11);
        //System.out.println(bd12);//12.0
        //减法
        BigDecimal bd13=bd10.subtract(bd11);
        //System.out.println(bd13);//8.0
        //乘法
        BigDecimal bd14=bd10.multiply(bd11);
        //System.out.println(bd14);//20.00
        //除法（可以除尽）
        BigDecimal bd15=bd10.divide(bd11);
        //System.out.println(bd15);//5
        //除法
        //保留2位小数，并且四舍五入（BigDecimal.Round_HALF_UP）
        BigDecimal bd16=bd10.divide(bd11,2,BigDecimal.ROUND_HALF_UP);
        //发现方法被划线时即已经淘汰过时了。可以按ctrl+p查看方法
        BigDecimal bd17=bd10.divide(bd11,2, RoundingMode.HALF_UP);
    }
}
